水無瀬の部屋 > Programming > sample > tools > misc > pathargv.cpp |
---|
1: //*********************************************************
2: // プロジェクト: TOOLS
3: // ファイル名: pathargv.cpp
4: //*********************************************************
5: #include <misc/pathargv.h>
6: #include <header/tooldbg.h> //
7: #include <header/toolbase.h> //
8: #include <header/toolsys.h> //
9:
10:
11: //---------------------------------------------------------
12: // テスト関数 の 宣言
13: //---------------------------------------------------------
14: DECLARE_TESTPROC( test_pathargv );
15:
16:
17: //---------------------------------------------------------
18: // 定数型マクロ の 定義
19: //---------------------------------------------------------
20: #define DBG_ALLOCNAME "GetPathArgcArgv"
21:
22:
23: //*********************************************************
24: // GetPathArgcArgv
25: //*********************************************************
26: char **
27: GetPathArgcArgv
28: (
29: int *count,
30: int argc,
31: char **argv
32: )
33: {
34: CALLONCE_TESTPROC( test_pathargv ); // [テスト]
35:
36: // パラメタの仮定
37: ASSERT( IsValidPtr( count, sizeof( *count ) ) );
38: ASSERT( IsValidArgcArgv( argc, argv ) );
39:
40: //
41: char **paths = (char **)malloc( (1 + argc) * sizeof( *paths ) );
42: if ( !paths )
43: return null;
44:
45: //
46: *count = 0;
47: {for( int i = 0; i < argc; ++i )
48: {
49: ASSERT( IsValidStringPtr( argv[ i ] ) );
50:
51: if ( IsPathExist( argv[ i ] ) )
52: {
53: char longpath[ MAX_PATH_BUF ];
54: if ( GetLongFileName( argv[ i ], longpath, numof( longpath ) ) )
55: {
56: ASSERT( IsPathExist( longpath ) );
57: ASSERT( 0 < strlen( longpath ) );
58:
59: // パスを追加
60: paths[ *count ] = strdup( longpath );
61: if ( !paths[ *count ] )
62: {
63: ReleasePathArgcArgv( *count, paths );
64: return null;
65: }
66: DBG_LOCK_ALLOCED_MEMORY( paths[ *count ], DBG_ALLOCNAME ); // [DBG]
67:
68: ++(*count);
69: }
70: }
71: }}
72:
73: ASSERT( *count <= argc );
74: paths[ *count ] = null;
75: ASSERT( IsValidArgcArgv( *count, paths ) );
76:
77: DBG_LOCK_ALLOCED_MEMORY( paths, DBG_ALLOCNAME ); // [DBG]
78: return paths;
79: }//GetPathArgcArgv
80:
81: //*********************************************************
82: // ReleasePathArgcArgv
83: //*********************************************************
84: bool
85: ReleasePathArgcArgv
86: (
87: int argc,
88: char **argv
89: )
90: {
91: CALLONCE_TESTPROC( test_pathargv ); // [テスト]
92:
93: // パラメタの仮定
94: ASSERT( IsValidArgcArgv( argc, argv ) );
95:
96: {for( int i = 0; i < argc; ++i )
97: {
98: ASSERT( IsValidLocalPathString( argv[ i ] ) );
99:
100: DBG_UNLOCK_ALLOCED_MEMORY( argv[ i ], DBG_ALLOCNAME ); // [DBG]
101: free( argv[ i ] );
102: }}
103:
104: DBG_UNLOCK_ALLOCED_MEMORY( argv, DBG_ALLOCNAME ); // [DBG]
105: free( argv );
106:
107: return true;
108: }//ReleasePathArgcArgv
109:
110:
111: //******************************************************************************************************************
112: // TEST
113: //******************************************************************************************************************
114:
115:
116: #ifdef _DEBUG // デバッグ時のみ
117:
118:
119: //*********************************************************
120: // test_pathargv()
121: //*********************************************************
122: DEFINE_TESTPROC( test_pathargv )
123: {
124: //---------------------------------------------------------
125: // 定数 の テスト
126: //---------------------------------------------------------
127:
128: // __argv[ 0 ] …… テストの大前提
129: {
130: ASSERT( IsPathFile( __argv[ 0 ] ) );
131: }
132:
133:
134: //---------------------------------------------------------
135: // ファイルスコープ関数 の テスト
136: //---------------------------------------------------------
137:
138: //---------------------------------------------------------
139: // 公開関数 の テスト
140: //---------------------------------------------------------
141:
142: // GetPathArgcArgv(), ReleasePathArgcArgv()
143: {
144: char *argv[] = { "", "", "", null };
145: argv[ 0 ] = __argv[ 0 ];
146: argv[ 2 ] = __argv[ 0 ];
147:
148: int count;
149: char **paths = GetPathArgcArgv( &count, numof(argv)-1, argv );
150: if ( paths )
151: {
152: ASSERT( 2 == count );
153: VERIFY( IsValidArgcArgv( count, paths ) );
154: ReleasePathArgcArgv( count, paths );
155: }
156: }
157:
158: }//test_pathargv
159:
160:
161: #endif // #ifdef _DEBUG
162:
163:
164: //** end **
参照:
水無瀬の部屋 > sample > tools > misc > pathargv.cpp |
---|
このページは cpp2web が出力しました。
水無瀬 優 postmaster@katsura-kotonoha.sakura.ne.jp
http://katsura-kotonoha.sakura.ne.jp/prog/code/tools/misc/pathargv_cpp.shtml